Project - Laptop Price Analysis¶
Domain: Data Analyst¶
Introduction:¶
This project analyzes Laptop specfications and prices to understand what factors influence laptop prices. The dataset contains details like company, CPU, GPU, RAM, storage, weight, Touchscreen, IPS panel, Screen size, operating system, and price.
Objectives:¶
The objective of this project is to analyze laptop specifications and understand how different features such as brand, RAM, screen size, storage type, operating system, and GPU influence the laptop price. This project focuses on data cleaning, exploratory data analysis (EDA), visualization, and extracting meaningful insights without using machine learning.
Tools Used:¶
Python: programming language for data analysis
Pandas: data cleaning and manipulation
NumPy: numerical operations
Matplotlib: data visualization
Seaborn: advanced and statistical visualizations
Data Description:¶
The dataset contains detailed specifications of different laptop models collected from online sources. It includes 1275 rows and 23 columns. Each row represents one laptop, and the columns describe its technical features.
Key columns in the dataset include:¶
Company - Brand of the laptop
Product - Model name
TypeName - Category (Notebook, Ultrabook, Gaming Laptop, ect.)
Inches - Screen size
Ram - Ram capacity (in GB)
OS - Operating system
Weight - Laptop weight (in kg)
Price_euros - Laptop weight ( in kg)
ScreenW / ScreenH - Screen resolution
RetinaDisplay / Touchscreen / IPSpanel - Display features
CPU_company / GPU_company - Processor and GPU brand
PrimaryStorageType / SecondaryStorage - Storage capacities
PrimaryStorageType / SecondaryStorageType - Storage type (SSD, HDD, Hybrid, Flash)
Importing Libraries:¶
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
Loading the Dataset:¶
df= pd.read_csv(r"C:\Users\sathv\Downloads\laptop_prices.csv", encoding='latin1')
df
| Company | Product | TypeName | Inches | Ram | OS | Weight | Price_euros | Screen | ScreenW | ... | RetinaDisplay | CPU_company | CPU_freq | CPU_model | PrimaryStorage | SecondaryStorage | PrimaryStorageType | SecondaryStorageType | GPU_company | GPU_model | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Apple | MacBook Pro | Ultrabook | 13.3 | 8 | macOS | 1.37 | 1339.69 | Standard | 2560 | ... | Yes | Intel | 2.3 | Core i5 | 128 | 0 | SSD | No | Intel | Iris Plus Graphics 640 |
| 1 | Apple | Macbook Air | Ultrabook | 13.3 | 8 | macOS | 1.34 | 898.94 | Standard | 1440 | ... | No | Intel | 1.8 | Core i5 | 128 | 0 | Flash Storage | No | Intel | HD Graphics 6000 |
| 2 | HP | 250 G6 | Notebook | 15.6 | 8 | No OS | 1.86 | 575.00 | Full HD | 1920 | ... | No | Intel | 2.5 | Core i5 7200U | 256 | 0 | SSD | No | Intel | HD Graphics 620 |
| 3 | Apple | MacBook Pro | Ultrabook | 15.4 | 16 | macOS | 1.83 | 2537.45 | Standard | 2880 | ... | Yes | Intel | 2.7 | Core i7 | 512 | 0 | SSD | No | AMD | Radeon Pro 455 |
| 4 | Apple | MacBook Pro | Ultrabook | 13.3 | 8 | macOS | 1.37 | 1803.60 | Standard | 2560 | ... | Yes | Intel | 3.1 | Core i5 | 256 | 0 | SSD | No | Intel | Iris Plus Graphics 650 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1270 | Lenovo | Yoga 500-14ISK | 2 in 1 Convertible | 14.0 | 4 | Windows 10 | 1.80 | 638.00 | Full HD | 1920 | ... | No | Intel | 2.5 | Core i7 6500U | 128 | 0 | SSD | No | Intel | HD Graphics 520 |
| 1271 | Lenovo | Yoga 900-13ISK | 2 in 1 Convertible | 13.3 | 16 | Windows 10 | 1.30 | 1499.00 | Quad HD+ | 3200 | ... | No | Intel | 2.5 | Core i7 6500U | 512 | 0 | SSD | No | Intel | HD Graphics 520 |
| 1272 | Lenovo | IdeaPad 100S-14IBR | Notebook | 14.0 | 2 | Windows 10 | 1.50 | 229.00 | Standard | 1366 | ... | No | Intel | 1.6 | Celeron Dual Core N3050 | 64 | 0 | Flash Storage | No | Intel | HD Graphics |
| 1273 | HP | 15-AC110nv (i7-6500U/6GB/1TB/Radeon | Notebook | 15.6 | 6 | Windows 10 | 2.19 | 764.00 | Standard | 1366 | ... | No | Intel | 2.5 | Core i7 6500U | 1024 | 0 | HDD | No | AMD | Radeon R5 M330 |
| 1274 | Asus | X553SA-XX031T (N3050/4GB/500GB/W10) | Notebook | 15.6 | 4 | Windows 10 | 2.20 | 369.00 | Standard | 1366 | ... | No | Intel | 1.6 | Celeron Dual Core N3050 | 500 | 0 | HDD | No | Intel | HD Graphics |
1275 rows × 23 columns
Data Cleaning / Data Preprocessing¶
In this Data cleaning step, I checked the dataset for any issues that can affect the analysis.I verified if there are any missing values, duplicate rows, or incorrect data types. Data cleaning helps make the dataset accurate, consistent, and ready for analysis.
Checking missing values¶
df.isnull().sum()
Company 0 Product 0 TypeName 0 Inches 0 Ram 0 OS 0 Weight 0 Price_euros 0 Screen 0 ScreenW 0 ScreenH 0 Touchscreen 0 IPSpanel 0 RetinaDisplay 0 CPU_company 0 CPU_freq 0 CPU_model 0 PrimaryStorage 0 SecondaryStorage 0 PrimaryStorageType 0 SecondaryStorageType 0 GPU_company 0 GPU_model 0 dtype: int64
Handling missing data¶
df = df.dropna()
# Removes rows with missing/null values.
Checking how many Rows & Columns¶
df.shape
(1275, 23)
df.info()
# Shows data types and whether any columns contains missing values.
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1275 entries, 0 to 1274 Data columns (total 23 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Company 1275 non-null object 1 Product 1275 non-null object 2 TypeName 1275 non-null object 3 Inches 1275 non-null float64 4 Ram 1275 non-null int64 5 OS 1275 non-null object 6 Weight 1275 non-null float64 7 Price_euros 1275 non-null float64 8 Screen 1275 non-null object 9 ScreenW 1275 non-null int64 10 ScreenH 1275 non-null int64 11 Touchscreen 1275 non-null object 12 IPSpanel 1275 non-null object 13 RetinaDisplay 1275 non-null object 14 CPU_company 1275 non-null object 15 CPU_freq 1275 non-null float64 16 CPU_model 1275 non-null object 17 PrimaryStorage 1275 non-null int64 18 SecondaryStorage 1275 non-null int64 19 PrimaryStorageType 1275 non-null object 20 SecondaryStorageType 1275 non-null object 21 GPU_company 1275 non-null object 22 GPU_model 1275 non-null object dtypes: float64(4), int64(5), object(14) memory usage: 229.2+ KB
# Removing extra spaces in text columns
df.columns= df.columns.str.strip()
for col in df.select_dtypes(include='object').columns:
df[col]= df[col].str.strip()
# Removes extra spaces from text columns,avoids errors during analysis.
# Standardize column text(upper/lower case cleaning)
for col in df.select_dtypes(include='object'):
df[col]= df[col].str.lower()
# Makes all text lowercase so values like "Windows" and "windows" are treated the same.
# Converting numeric columns to correct data types
numeric_cols = ['Ram','Weight','Price_euros','ScreenW','ScreenH']
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric, errors='coerce')
# Ensures numeric columns are in proper format(float/int)
Removing Duplicates:¶
df.drop_duplicates(inplace=True)
# Removes repeated values for better accuracy.
Describing Numeric Columns¶
df.describe()
# Gives statistical summary like mean, min, max, percentiles.
| Inches | Ram | Weight | Price_euros | ScreenW | ScreenH | CPU_freq | PrimaryStorage | SecondaryStorage | |
|---|---|---|---|---|---|---|---|---|---|
| count | 1275.000000 | 1275.000000 | 1275.000000 | 1275.000000 | 1275.000000 | 1275.000000 | 1275.000000 | 1275.000000 | 1275.000000 |
| mean | 15.022902 | 8.440784 | 2.040525 | 1134.969059 | 1900.043922 | 1073.904314 | 2.302980 | 444.517647 | 176.069020 |
| std | 1.429470 | 5.097809 | 0.669196 | 700.752504 | 493.346186 | 283.883940 | 0.503846 | 365.537726 | 415.960655 |
| min | 10.100000 | 2.000000 | 0.690000 | 174.000000 | 1366.000000 | 768.000000 | 0.900000 | 8.000000 | 0.000000 |
| 25% | 14.000000 | 4.000000 | 1.500000 | 609.000000 | 1920.000000 | 1080.000000 | 2.000000 | 256.000000 | 0.000000 |
| 50% | 15.600000 | 8.000000 | 2.040000 | 989.000000 | 1920.000000 | 1080.000000 | 2.500000 | 256.000000 | 0.000000 |
| 75% | 15.600000 | 8.000000 | 2.310000 | 1496.500000 | 1920.000000 | 1080.000000 | 2.700000 | 512.000000 | 0.000000 |
| max | 18.400000 | 64.000000 | 4.700000 | 6099.000000 | 3840.000000 | 2160.000000 | 3.600000 | 2048.000000 | 2048.000000 |
View Data types:¶
df.dtypes
Company object Product object TypeName object Inches float64 Ram int64 OS object Weight float64 Price_euros float64 Screen object ScreenW int64 ScreenH int64 Touchscreen object IPSpanel object RetinaDisplay object CPU_company object CPU_freq float64 CPU_model object PrimaryStorage int64 SecondaryStorage int64 PrimaryStorageType object SecondaryStorageType object GPU_company object GPU_model object dtype: object
Used df.isnull().sum() to identify null values. The dataset did not contain significate missing values.
Used df.drop_duplicates() to elimate repeated rows.
Corrected data types: Ensured columns like RAM, storage, and Ensured columns like RAM, storage, and weight were in the correct numeric or categorical format. Cleaned text fields: Standardized values in columns such as OS, Company, Storage Type, and Display features to maintain consistency.
pip install ydata-profiling
Requirement already satisfied: ydata-profiling in c:\users\sathv\anaconda3\lib\site-packages (4.17.0)Note: you may need to restart the kernel to use updated packages. Requirement already satisfied: scipy<1.16,>=1.4.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.15.3) Requirement already satisfied: pandas!=1.4.0,<3.0,>1.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.2.3) Requirement already satisfied: matplotlib<=3.10,>=3.5 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (3.10.0) Requirement already satisfied: pydantic>=2 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.10.3) Requirement already satisfied: PyYAML<6.1,>=5.0.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (6.0.2) Requirement already satisfied: jinja2<3.2,>=2.11.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (3.1.6) Requirement already satisfied: visions<0.8.2,>=0.7.5 in c:\users\sathv\anaconda3\lib\site-packages (from visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (0.8.1) Requirement already satisfied: numpy<2.2,>=1.16.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.1.3) Requirement already satisfied: minify-html>=0.15.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.18.1) Requirement already satisfied: filetype>=1.0.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.2.0) Requirement already satisfied: phik<0.13,>=0.11.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.12.5) Requirement already satisfied: requests<3,>=2.24.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.32.3) Requirement already satisfied: tqdm<5,>=4.48.2 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (4.67.1) Requirement already satisfied: seaborn<0.14,>=0.10.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.13.2) Requirement already satisfied: multimethod<2,>=1.4 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.12) Requirement already satisfied: statsmodels<1,>=0.13.2 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.14.4) Requirement already satisfied: typeguard<5,>=3 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (4.4.4) Requirement already satisfied: imagehash==4.3.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (4.3.1) Requirement already satisfied: wordcloud>=1.9.3 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.9.4) Requirement already satisfied: dacite>=1.8 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.9.2) Requirement already satisfied: numba<=0.61,>=0.56.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.61.0) Requirement already satisfied: PyWavelets in c:\users\sathv\anaconda3\lib\site-packages (from imagehash==4.3.1->ydata-profiling) (1.8.0) Requirement already satisfied: pillow in c:\users\sathv\anaconda3\lib\site-packages (from imagehash==4.3.1->ydata-profiling) (11.1.0) Requirement already satisfied: MarkupSafe>=2.0 in c:\users\sathv\anaconda3\lib\site-packages (from jinja2<3.2,>=2.11.1->ydata-profiling) (3.0.2) Requirement already satisfied: contourpy>=1.0.1 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (1.3.1) Requirement already satisfied: cycler>=0.10 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (0.11.0) Requirement already satisfied: fonttools>=4.22.0 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (4.55.3) Requirement already satisfied: kiwisolver>=1.3.1 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (1.4.8) Requirement already satisfied: packaging>=20.0 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (24.2) Requirement already satisfied: pyparsing>=2.3.1 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (3.2.0) Requirement already satisfied: python-dateutil>=2.7 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (2.9.0.post0) Requirement already satisfied: llvmlite<0.45,>=0.44.0dev0 in c:\users\sathv\anaconda3\lib\site-packages (from numba<=0.61,>=0.56.0->ydata-profiling) (0.44.0) Requirement already satisfied: pytz>=2020.1 in c:\users\sathv\anaconda3\lib\site-packages (from pandas!=1.4.0,<3.0,>1.1->ydata-profiling) (2024.1) Requirement already satisfied: tzdata>=2022.7 in c:\users\sathv\anaconda3\lib\site-packages (from pandas!=1.4.0,<3.0,>1.1->ydata-profiling) (2025.2) Requirement already satisfied: joblib>=0.14.1 in c:\users\sathv\anaconda3\lib\site-packages (from phik<0.13,>=0.11.1->ydata-profiling) (1.4.2) Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (3.3.2) Requirement already satisfied: idna<4,>=2.5 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (3.7) Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (2.3.0) Requirement already satisfied: certifi>=2017.4.17 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (2025.8.3) Requirement already satisfied: patsy>=0.5.6 in c:\users\sathv\anaconda3\lib\site-packages (from statsmodels<1,>=0.13.2->ydata-profiling) (1.0.1) Requirement already satisfied: colorama in c:\users\sathv\anaconda3\lib\site-packages (from tqdm<5,>=4.48.2->ydata-profiling) (0.4.6) Requirement already satisfied: typing_extensions>=4.14.0 in c:\users\sathv\anaconda3\lib\site-packages (from typeguard<5,>=3->ydata-profiling) (4.15.0) Requirement already satisfied: attrs>=19.3.0 in c:\users\sathv\anaconda3\lib\site-packages (from visions<0.8.2,>=0.7.5->visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (24.3.0) Requirement already satisfied: networkx>=2.4 in c:\users\sathv\anaconda3\lib\site-packages (from visions<0.8.2,>=0.7.5->visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (3.4.2) Requirement already satisfied: puremagic in c:\users\sathv\anaconda3\lib\site-packages (from visions<0.8.2,>=0.7.5->visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (1.30) Requirement already satisfied: annotated-types>=0.6.0 in c:\users\sathv\anaconda3\lib\site-packages (from pydantic>=2->ydata-profiling) (0.6.0) Requirement already satisfied: pydantic-core==2.27.1 in c:\users\sathv\anaconda3\lib\site-packages (from pydantic>=2->ydata-profiling) (2.27.1) Requirement already satisfied: six>=1.5 in c:\users\sathv\anaconda3\lib\site-packages (from python-dateutil>=2.7->matplotlib<=3.10,>=3.5->ydata-profiling) (1.17.0)
from ydata_profiling import ProfileReport
Improve your data and profiling with ydata-sdk, featuring data quality scoring, redundancy detection, outlier identification, text validation, and synthetic data generation.
profile = ProfileReport(df)
profile
Summarize dataset: 0%| | 0/5 [00:00<?, ?it/s]
%| | 0/23 [00:00<?, ?it/s] %|███████▏ | 2/23 [00:00<00:03, 6.84it/s] 100%|██████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 51.01it/s]
Generate report structure: 0%| | 0/1 [00:00<?, ?it/s]
Render HTML: 0%| | 0/1 [00:00<?, ?it/s]
%matplotlib inline
brand_price = df.groupby("Company")["Price_euros"].mean().sort_values(ascending= False)
brand_price.plot(kind='bar', figsize=(8,4), title='Average Laptop Price by Company')
plt.ylabel("Average Price(Euros)")
plt.show()
This bar chart shows the average price of laptops for each company.It helps compare which brands generally sell high-priced laptops and which offer budget options.
Key Insight:
Razer, LG, and MSI have the highest average prices, meaning they produce more premium laptops. Dell,Lenovo,and HP have many models but offer more budget-friendly options.
Chart 2: Laptop Type Distribution.¶
# Laptop Count by Type
df['TypeName'].value_counts().plot(kind= "bar", figsize=(4,2), color="Brown")
plt.title("Laptop Type Distribution")
plt.ylabel('')
plt.show()
This chart shows the number of laptops avaiable in each category such as Notebook, Gaming, Ultrabook, etc.
Key Insight:
Notebook laptops dominate the dataset, followed by Gaming and Ultrabook types. Very few models belong to Workstation and Netbook categories.
Chart 3: Weight Vs Price.¶
sns.scatterplot(x="Weight", y="Price_euros", data=df)
plt.title("Weight vs Price")
plt.show()
This scatter plot compares laptop weight with price to check if heavier laptops cost more.
Key Insight:
There is no storng relationship between weight and price.Both light and heavy laptops exist at low and high price ranges.
Chart 4: Average Laptop Price Vs Screen Size.¶
screen_trend= df.groupby("Inches")["Price_euros"].mean().sort_index()
lt.figure(figsize=(8,4))
plt.plot(screen_trend.index, screen_trend.values,
marker="o", linestyle="-", color="green")
plt.title("Average Laptop Price Vs Screen Size")
plt.ylabel("Screen Size(Inches)")
plt.xlabel("Average Price(Euros)")
plt.grid(True)
plt.show()
This chart shows how average laptop price changes depending on screen size.
Key Insight:
Prices vary across screen sizes, but larger screens (17-19 inches) tend to have higher average prices, indicating they are premium models.
chart 5: Operating System Vs Laptop Price.¶
sns.boxplot(x="OS", y="Price_euros", hue="OS",data=df, palette="Set3",dodge=False)
plt.legend([],[], frameon=False)
plt.title("Operating System vs Laptop Price")
plt.show()
This Boxplot compares price ranges for different operating systems like Windows, macOS, Linux, Chrome OS.
Key Insight:
macOS has highest price range,while Chrome OS and Linux laptops are mostly low-priced, showing they are budget friendly.
Chart 6: Touchscreen Vs Non-Touchscreen.¶
df["Touchscreen"].value_counts().plot(kind="pie", autopct="%.1f%%",
figsize=(6,3))
plt.title("Touchscreen Availability")
plt.ylabel("")
plt.show()
This pie chart shows the percentage of laptops that hve a touchscreen features.
Key Insight:
Only 14.7% of laptops have a touchscreen.Most laptops(85.3%) are non-touchscreen,meaning the feature is less common.
Chart 7: Number of Laptops per Company¶
company_count=df["Company"].value_counts()
plt.figure(figsize=(8,4))
plt.barh(company_count.index, company_count.values, color="purple")
plt.xlabel("Number of Laptops")
plt.ylabel("Number of Laptops per Company")
plt.show()
This chart displays how many laptop models each company has in the dataset.
Key Insight:
Dell,Lenovo,and HP have the most number of models, while brands like Huawel,LG,and Google have very few.
Chart 8: Top 5 products with highest Screen Height .¶
top_screenH = df.nlargest(5, 'ScreenH')[['Product', 'ScreenH']]
top_screenH
plt.figure(figsize=(6,3))
plt.barh(top_screenH['Product'], top_screenH['ScreenH'], color='orange')
plt.xlabel("Screen Height (pixels)")
plt.title("Top 5 Products with Highest Screen Height")
plt.gca().invert_yaxis()
plt.show()
This chart lists the top 5 laptops with the highest screen resolution height(in pixels).
Key Insight:
Models like EliteBook Follo,Spectre x360,Yoga 920 have the highest screen heights,indicatig high-resolution displays.
Chart 9: IPS Panel Vs Non-IPS Panel.¶
df["IPSpanel"].value_counts().plot(kind="pie", autopct="%.1f%%", figsize=(6,3))
plt.title("IPS Panel Vs Non-IPS Panel")
plt.ylabel("")
plt.show()
This pie chart shows how many laptops use IPS panels compared to non-IPS screens.
Key Insight:
Only 28% of laptops have IPS panels.Most laptops(72%) use non-IPS displays,meaning IPS screen is a premium feature.
Chart 10: GPU Company Vs Laptop Price.¶
plt.figure(figsize=(6,4))
sns.barplot(x='GPU_company', y='Price_euros', data=df, color="cyan")
plt.title("GPU Company vs Laptop Price")
plt.xlabel("GPU Company")
plt.ylabel("Price (Euros)")
plt.show()
This bar plot shows how different GPU brands influence the overall pricing. Nvidia-based laptops have the highest average prices, while ARM-based laptops are the least expensive.
Key Insight:
Nvidia GPUs are found in the most expensive laptops, indicating high performance and premium categories. ARM and AMD laptops fall in the mid-range.
Conclusion:¶
In this Project, I analyzed the laptop dataset using Python, Pandas, and visualization libraries. I cleaned the data, explored different features, and created various charts to understand pricing trends. From the analysis, I observed how laptop price changing with company, GPU, OS, screen size, weight, RAM, touchscreen, and other specifications. These Insights help in understanding what features influence laptop prices the most and which products are more common in the marke